package com.library.books.domain.vo.borrow;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.library.common.core.serialize.DesensitizeSerialize;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @ClassName: BooksJoinBorrowRecord
 * @Description: 书架、期刊、期刊副本、借阅记录实体类
 * @Author: hb
 * @Date: 2024/10/16
 */
@Data
public class JournalJoinBorrowRecord {

    /** 书架名称：A书架 */
    private String bookShelfName;

    /** 期刊id */
    private Long journalId;

    /** ISSN号 */
    private String journalIssn;

    /** 书籍名称 */
    private String journalName;

    /** 书籍作者 */
    private String journalAuthor;

    /// 复本

    /** 书架id */
    private Long bookShelfId;

    /** RFID号 */
    private String journalBuildCopyRfid;

    /** BARCODE号 */
    private String journalBuildCopyBarcode;

    /** 馆藏状态 */
    private String journalBuildCopyStatus;

    /** 索书号 */
    private String journalBuildCopyLicense;

    /** 书籍副本id */
    private Long journalBuildCopyId;

    /// 借阅信息

    /** borrowId */
    private Long borrowId;

    /** 借阅人卡号 */
    private String borrowCard;

    /** 借阅天数 */
    private Integer borrowDays;

    /** 续借天数 */
    private Integer borrowRenewDays;

    /** 续借次数 */
    private Long borrowRenewNum;

    /** 续借时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date borrowRenewTime;

    /** 归还时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date borrowReturnTime;

    /** 应还时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date borrowShouldReturnTime;

    /** 逾期天数（创建时间[借阅时间]与当天相差时间 ） */
    private Long borrowOverdueDays;

    /** 已逾期天数 */
    private Long borrowOverdueTotalDays;

    /** 借阅状态：0：正常，1：逾期 */
    private String borrowStatus;

    /** 创建时间-借阅时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /// 借阅规则、借阅类型

    /** 副本借阅规则id */
    private Long booksRuleId;

    /** 规则名称 */
    private String booksRuleName;

    /** 借阅限制天数 */
    private Long booksRuleTerm;

    /** 逾期滞纳金 */
    private BigDecimal booksRuleTarryFine;

    /** 是否续借：0：是，1：否 */
    private String booksRuleRenew;

    /** 续借次数 */
    private Long booksRuleRenewNum;

    /** 续借限制天数 */
    private Long booksRuleRenewTerm;

    /** 规则状态：0，正常，1：停用 */
    private String booksRuleStatus;

    /** 学号 */
    private String studentNumber;

    /** 学生姓名 */
    @JsonSerialize(using = DesensitizeSerialize.class)
    private String studentName;


    /** 借阅人应该给的滞纳金 */
    private BigDecimal borrowTakeTarryFine;

    /// 自助机要使用

    /** 操作平台 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String operateTerrace;

    /** 操作员卡号 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String operateCard;

    /** 操作编号(用户编号/学生编号) */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String operateNumber;

    /** 创建人id */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long createId;

    /** 创建者 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String createBy;

    /** 修改人id */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long updateId;

    /** 修改人 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String updateBy;

    /** 借阅日期 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Date startTime;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Date endTime;

    /** 这个判断没必要给sql，手动处理负数 */
    public void setBorrowOverdueDays(long borrowOverdueDays) {
        this.borrowOverdueDays = Math.max(borrowOverdueDays,0);
    }

    /** 当前逾期天数也算作总天数 */
    public void setBorrowOverdueTotalDays(long borrowOverdueTotalDays) {
        this.borrowOverdueTotalDays = Math.max(borrowOverdueTotalDays ,0);
    }
}
